﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Linq;
using System.IO;
using DO = DataObjects;
using DM = DataMapping;

namespace DataAccess
{
    public class VendedorDB
    {

        #region Metodos Publicos

        public static DO.Vendedor GetItem(int id)
        {
            using (DM.DataMappingDataContext dc = new DM.DataMappingDataContext())
            {
                DM.Vendedor vendedor = (from v in dc.Vendedors
                                        where v.idVendedor == id
                                        select v).FirstOrDefault();

                return FillRecord(vendedor);
            }
        }

        public static List<DO.Vendedor> GetList()
        {
            using (DM.DataMappingDataContext dc = new DM.DataMappingDataContext())
            {
                List<DM.Vendedor> vendedorList = (from c in dc.Vendedors
                                                  select c).ToList();

                List<DO.Vendedor> vendedorListReturn = new List<DO.Vendedor>();
                foreach (DM.Vendedor c in vendedorList)
                    vendedorListReturn.Add(FillRecord(c));

                return vendedorListReturn;
            }
        }

        public static int Save(DO.Vendedor vendedor)
        {
            using (DM.DataMappingDataContext dc = new DM.DataMappingDataContext())
            {
                DM.Vendedor vendedorDB = (from v in dc.Vendedors
                                          where v.idVendedor == vendedor.Id
                                          select v).FirstOrDefault();

                if (vendedorDB == null)
                {
                    vendedorDB = new DM.Vendedor();

                    vendedorDB.Bairro = vendedor.Bairro;
                    vendedorDB.Celular = vendedor.Celular;
                    vendedorDB.Cidade = vendedor.Cidade;
                    vendedorDB.Complemento = vendedor.Complemento;
                    vendedorDB.DtAdmissao = vendedor.DtAdmissao;
                    vendedorDB.Email = vendedor.Email;
                    vendedorDB.Estado = vendedor.Estado;
                    vendedorDB.FoneFixo = vendedor.FoneFixo;
                    vendedorDB.idVendedor = vendedor.Id;
                    vendedorDB.Logradouro = vendedor.Logradouro;
                    vendedorDB.NomeCompleto = vendedor.NomeCompleto;
                    vendedorDB.NomeSimples = vendedor.NomeSimples;
                    vendedorDB.Numero = vendedor.Numero;
                    
                    dc.Vendedors.InsertOnSubmit(vendedorDB);
                }
                else
                {
                    vendedorDB.Bairro = vendedor.Bairro;
                    vendedorDB.Celular = vendedor.Celular;
                    vendedorDB.Cidade = vendedor.Cidade;
                    vendedorDB.Complemento = vendedor.Complemento;
                    vendedorDB.DtAdmissao = vendedor.DtAdmissao;
                    vendedorDB.Email = vendedor.Email;
                    vendedorDB.Estado = vendedor.Estado;
                    vendedorDB.FoneFixo = vendedor.FoneFixo;
                    vendedorDB.idVendedor = vendedor.Id;
                    vendedorDB.Logradouro = vendedor.Logradouro;
                    vendedorDB.NomeCompleto = vendedor.NomeCompleto;
                    vendedorDB.NomeSimples = vendedor.NomeSimples;
                    vendedorDB.Numero = vendedor.Numero;
                }

                try
                {
                    dc.SubmitChanges();
                    return vendedorDB.idVendedor;
                }
                catch (Exception ex)
                {
                    string date = ((DateTime.Now).ToString()).Substring(0, 9);
                    date = date.Replace('/', '-');
                    string location = "\\\\Servidor\\SharedDocs\\Aplicação\\Log";
                    string path = (String.Format("{0}{1}\\Problema Gravação_{2}.txt", @"", location, date));
                    StreamWriter valor = new StreamWriter(path, true, Encoding.ASCII);
                    valor.WriteLine("Erro ao salvar: " + vendedorDB.NomeSimples);
                    valor.WriteLine(ex.Message);
                    valor.WriteLine("------------------------------------------------------");
                    valor.Close();

                    dc.ChangeConflicts.ResolveAll(RefreshMode.OverwriteCurrentValues);
                    dc.SubmitChanges();

                    return -1;
                }
            }
        }

        public static bool Delete(int id)
        {
            using (DM.DataMappingDataContext dc = new DM.DataMappingDataContext())
            {
                DM.Vendedor vendedorDB = (from v in dc.Vendedors
                                          where v.idVendedor == id
                                          select v).FirstOrDefault();

                if (vendedorDB != null)
                {
                    try
                    {
                        dc.Vendedors.DeleteOnSubmit(vendedorDB);
                        dc.SubmitChanges();
                        return true;
                    }
                    catch (Exception ex)
                    {
                        string date = ((DateTime.Now).ToString()).Substring(0, 9);
                        date = date.Replace('/', '-');
                        string location = "\\\\Servidor\\SharedDocs\\Aplicação\\Log";
                        string path = (String.Format("{0}{1}\\Problema Exclusão_{2}.txt", @"", location, date));
                        StreamWriter valor = new StreamWriter(path, true, Encoding.ASCII);
                        valor.WriteLine("Erro ao excluir:" + vendedorDB.NomeSimples);
                        valor.WriteLine(ex.Message);
                        valor.WriteLine("------------------------------------------------------");
                        valor.Close();

                        dc.ChangeConflicts.ResolveAll(RefreshMode.OverwriteCurrentValues);
                        dc.SubmitChanges();

                        return true;
                    }
                }
                else
                    return false;
            }
        }

        #endregion

        #region Metodos Privados

        private static DO.Vendedor FillRecord(DM.Vendedor vendedorDB)
        {
            DO.Vendedor vendedor = new DO.Vendedor();
            
            vendedor.Id = vendedorDB.idVendedor;
            vendedor.NomeCompleto = vendedorDB.NomeCompleto;
            vendedor.NomeSimples = vendedorDB.NomeSimples;
            vendedor.Logradouro = vendedorDB.Logradouro;
            vendedor.Numero = vendedorDB.Numero;
            vendedor.Complemento = vendedorDB.Complemento;
            vendedor.Bairro = vendedorDB.Bairro;
            vendedor.Cidade = vendedorDB.Cidade;
            vendedor.Estado = vendedorDB.Estado;
            vendedor.FoneFixo = vendedorDB.FoneFixo;
            vendedor.Celular = vendedorDB.Celular;
            vendedor.Email = vendedorDB.Email;
            vendedor.DtAdmissao = (DateTime)vendedorDB.DtAdmissao;

            return vendedor;
        }

        #endregion

    }
}
